package com.ruyuan2020.im.design.observerdesignpattern;
// 客户端代码

/**
 * 这里展示了观察者模式的核心思想：主题维护一个观察者列表，当主题状态发生变化时，所有注册的观察者都会收到通知，
 * 这种方式降低了主题和观察者之间的耦合性，使得可以独立地改变主题或观察者，
 * 而不会影响到对方，同时，它也可以动态地添加或移除观察者，从而增加了代码的灵活性和可扩展性。
 */
public class Client {
    public static void main(String[] args) {
        // 创建具体主题和观察者
        ConcreteSubject subject = new ConcreteSubject();
        Observer observer = new ConcreteObserver();

        // 注册观察者
        subject.registerObserver(observer);

        // 改变主题状态
        subject.setState("new state");

        // 取消注册观察者
        subject.removeObserver(observer);

        // 再次改变主题状态，此时观察者不再接收通知
        subject.setState("another new state");
    }
}
